home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr47 / wasm223.zip / DHEX.INC < prev    next >
Text File  |  1993-05-04  |  3KB  |  101 lines

  1. ;Donald E. Johnson's Hex display/debugging package
  2. ;  MICON Systems, Inc.   or  Computer Science Dept.
  3. ;  RT. 3, Box 163D           University of Wis.
  4. ;  Menomonie, WI 54751       Eau Claire, WI 54701
  5. ;This program may be used without obligation,
  6. ;  but NO PART OF IT MAY BE SOLD.
  7. ;** Useage: Include the following in your code **
  8. ;VIDEO EQU 0B800H ;0B000H for monochrome controller
  9. ; INCLUDE 'DHEX.INC' ;this file
  10. ; DISP LOC,PARAM ;whenever a hex display is desired
  11. ; ;LOC=0-1999 (numeric) = position on the screen
  12. ; ;PARAM=byte/word to display as 2 or 4 hex digits
  13. ; ; e.g. - VAR, BX, CH, BYTE [DI+BX], 12, 45AH, etc.
  14. ;registers are not modified by the DISP macro
  15.     list-        ;don't list in user's prog.
  16.   if $=256        ;previous code?
  17.     jmps    ovrdb    ;execute only if invoked
  18.   endif
  19. dalax    proc    near    ;display AL or AX
  20. ;video displacement follows call and is:
  21. ; + for AL and - for AX display
  22.     push    bp
  23.     mov    bp,sp    ;set-up linkage
  24.     pushf
  25.     push word [bp+4] ;AX pushed before call
  26.     push    cx
  27.     push    ds    ;all used regs saved
  28.     push word [bp+2] ;location param addr
  29.     add word [bp+2],2 ;skip param on RET
  30.     pop    bp    ;param addr
  31.     seg    cs    ;param in-line
  32.     mov    bp,[bp] ;video addr
  33.     mov    cx,video ;video start
  34.     mov    ds,cx
  35.     mov    cx,404h ;4 digits, 4 rotates
  36.     neg    bp    ;AX if -addr
  37.     jns    dhexl    ;if 4 digits
  38.     neg    bp    ;2 digits only
  39.     mov    ah,al
  40.     mov    ch,2
  41. dhexl    rol    ax,cl    ;msNIB to lsNIB
  42.     push    ax
  43.     and    al,15    ;only nibble
  44.     cmp    al,9
  45.     jle    decdg
  46.     add    al,7
  47. decdg    add    al,'0'    ;ASCII digit
  48.     seg    ds
  49.     mov    [bp],al ;display digit
  50.     inc    bp
  51.     inc    bp    ;next addr
  52.     pop    ax
  53.     dec    ch    ;nibbles left
  54.     jne    dhexl
  55.     pop    ds    ;restore regs
  56.     pop    cx
  57.     pop    ax
  58.     popf
  59.     pop    bp    ;no side-effects
  60.     ret    2    ;remove orig AX
  61.     endp    ;DALAX
  62.  if offset dalax = 259
  63. ovrdb    ;target to jmp around proc
  64.  endif
  65. ;******** Display Macro **************
  66. ;generate a CALL to DALAX with:
  67. ; Stack top = AX for restoration
  68. ; AX or AL = value to display
  69. ; word following call = video address
  70. ;  (negative for AX, positive for AL)
  71. disp    macro    pos,val ;byte or word
  72.   if (video>0) and (pos<1999)
  73.    if size(val) and size(al) ;byte?
  74.     push    ax
  75.      ifn type(val)=type(al)
  76.     mov    al,val    ;get byte
  77.      endif
  78.     call    dalax    ;display byte
  79.     dw    pos+pos    ;+vid addr
  80.    elseif size(val) and size(ax) ;word?
  81.     push    ax
  82.      ifn type(val)=type(ax)
  83.     mov    ax,val    ;get word
  84.      endif
  85.     call    dalax    ;display it
  86.     dw    -pos-pos ;-vid addr
  87.    endif
  88.   endif
  89.  endm ;disp
  90. ;The following is an example program
  91.  if 0    ;1 to expand test example
  92. exstr    mov    ax,1234h
  93.     disp    78,ah    ;last 2 of line 0
  94.     disp    160,ax    ;first 4 of line 2
  95.     mov    di,offset exstr
  96.     disp    200,word[di+1] ;middle, #2
  97.     disp    1,bytvar ;2nd position
  98.     retn    ;DOS return
  99. bytvar    db    9ah
  100.  endif ;example program
  101.